#ifndef DATA_H
#define DATA_H
#include <iostream>
#include <fstream>

using namespace std;

template <class T> class Data
{
public:
Data(char*);
Data(const Data&);
~Data(void); 
Data& operator=(const Data&);
char  Get_char();
bool Test_EOF();
void Write(char*);

private:
	T _data; //file type
	bool _EOF;
 }; 
 #endif // 
template <class T> Data::Data(char* path)
{
	_data.open(path);//mettre un test pour l'ouverture 
	if(!_data.is_open())
	{
		cout <<"Cannot open file";
	//	system("pause");
	}	
	_EOF=false;
}


template <class T> Data::Data(const Data &d)//constructeur copie
{
	//_data=&d._data;
	//filebuf *pbuf;
	//pbuf=(d._data).rdbuf();
	//_data.rdbuf(pbuf);
}	

//Data& Data::operator= (const Data& d)//operateur =
//{
//	filebuf *pbuf;
//	pbuf=(d._data).rdbuf();
//}

Data::~Data()
{
	_data.close();
}

template <class T> char Data::Get_char()
{
	
	char current_char=NULL;//onfixe le current char egale null
	streambuf *pbuf;// on initialise pointeur sur streambuf
	pbuf=_data.rdbuf();// on aloue le pointeur sur les donnés (voir constructeur)
	if(pbuf->sgetc()!=EOF)//test la fin du fichier
	{
		_data >> current_char;
	}else{
		_EOF=true;
	}
	return current_char;
}

template <class T> bool Data::Test_EOF()
{
	return _EOF;
}
void Data::Write(char* c)
{
	_data << c;

}


